package mx.com.theboard.client.notas;

import java.util.Date;

import mx.com.theboard.client.Mensaje;
import mx.com.theboard.client.controllers.NotaController;
import mx.com.theboard.shared.entidades.Nota;
import mx.com.theboard.shared.entidades.Punto;

import org.apache.tools.ant.taskdefs.condition.Not;

import com.google.gwt.core.client.GWT;
import com.google.gwt.dev.asm.Type;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.MouseDownEvent;
import com.google.gwt.event.dom.client.MouseDownHandler;
import com.google.gwt.event.dom.client.MouseUpEvent;
import com.google.gwt.event.dom.client.MouseUpHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.PopupListener;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TextBox;

public abstract class TBNota extends DialogBox implements TBNotaI,MouseDownHandler {
	private VerticalPanel content;
	private VerticalPanel contenidof;
	protected TextBox tituloNota;
	private NotaController notacontroller;
	private HorizontalPanel header;
	public static int z;
	
	
	public TBNota(String titulo) {		
		init();
		
		VerticalPanel verticalPanel = new VerticalPanel();
		setWidget(verticalPanel);
		verticalPanel.setSize("400px", "300px");
		
		header = new HorizontalPanel();
		header.setStyleName("titulomsg");
		verticalPanel.add(header);
		header.setWidth("400px");
		
		VerticalPanel datos = new VerticalPanel();
		header.add(datos);
		datos.setSize("312px", "31px");
		
		
		tituloNota = new TextBox();		
		tituloNota.setStyleName("gwt-TextBox  tbtitulo");
		tituloNota.setText(titulo);
		datos.add(tituloNota);
		tituloNota.setSize("276px", "13px");
		tituloNota.setEnabled(false);
		
		Label fecha = new Label(new Date().toString());
		fecha.setStyleName("gwt-Label tbfecha");
		datos.add(fecha);
				
		
		BotonBasuraNota basura = new BotonBasuraNota(this);
		header.add(basura);
		
		content = new VerticalPanel();
		verticalPanel.add(content);
		content.setSize("400px", "280px");
		
		ScrollPanel scrollPanel = new ScrollPanel();
		scrollPanel.setStyleName("scrollnota");
		content.add(scrollPanel);
		scrollPanel.setSize("392px", "270px");
		
		contenidof = new VerticalPanel();
		scrollPanel.setWidget(contenidof);
		contenidof.setSize("100%", "100%");
		
		
		
	}

	public TBNota(NotaController notacontroller) {
		this("Sin titulo");
		this.notacontroller = notacontroller;		
		BotonEditarNota editar = new BotonEditarNota(notacontroller);
		tituloNota.setEnabled(true);
		header.add(editar);		
	}
	
	private void init(){
		setHTML("The Board: ");
		setModal(false);
		setStyleName("mensaje");
		setGlassStyleName("");
		setSize("400px", "300px");
		addHandler(this,MouseDownEvent.getType());
		if(z == 0)
			z = DOM.getIntStyleAttribute(this.getElement(), "zIndex"); 
	}
	
	@Override
	public void onMouseDown(MouseDownEvent event) {
		System.out.println("Mouse down");
		this.setVisible(true);
		this.show();		
		RootPanel rootPanel = RootPanel.get();
		rootPanel.setVisible(this.getWidget().getElement(),true);
		DOM.setIntStyleAttribute(this.getElement(), "zIndex", z++); 
	}

	@Override
	public void mostrar() {
		if(this.notacontroller.getNota().getPunto() == null ||
				this.notacontroller.getNota().getPunto().getX()==1.0){
			this.center();
			this.show();			
		}else{
			Punto p = this.notacontroller.getNota().getPunto();
			this.setPopupPosition(p.getX().intValue(), p.getY().intValue());
			this.show();
		}
		if(z > 0)
			DOM.setIntStyleAttribute(this.getElement(), "zIndex", z++);
		
	}

	@Override
	protected void endDragging(MouseUpEvent event) {		
		super.endDragging(event);
		Punto p = notacontroller.getNota().getPunto();
		p.setX((double) this.getAbsoluteLeft());
		p.setY((double) this.getAbsoluteTop());
		notacontroller.getNota().setPunto(p);
		notacontroller.guardar();
	}
	
	public VerticalPanel getContent() {
		return contenidof;
	}

	public void setContent(VerticalPanel content) {
		this.contenidof = content;
	}

	public TextBox getTituloNota() {
		return tituloNota;
	}

	public void setTituloNota(TextBox tituloNota) {
		this.tituloNota = tituloNota;
	}

	public NotaController getNotacontroller() {
		return notacontroller;
	}

	public void setNotacontroller(NotaController notacontroller) {
		this.notacontroller = notacontroller;
	}	
	
	@Override
	public String getTitulo() {		
		return tituloNota.getValue();
	}
	
	@Override
	public void focusTitulo(){
		tituloNota.setFocus(true);
		tituloNota.selectAll();
	}
	
	public void borrar(){
		this.hide();
		Mensaje db = new Mensaje("theBoard","Nota borrada correctamente!");
		db.setModal(true);
		db.center();				
		db.show();
	}
	
	
	
}
